#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 1e5+5;
vector<pair<int, int>>v;
bool comparebyd(pair<int, int> p1, pair<int, int> p2){
	if(p1.first < p2.first){
		return true;
	}
	if (p1.first == p2.first) {
		return p1.second < p2.second;
	}
	return false;
}


// 使用 sort 的方法
//// vector 怎么从 1 开始放, 并且从 1 开始排序
//int maxh[maxn]; // 从当前位置往后的最大高度
//void solve(){
//	int n;
//	cin >> n;
//	v.push_back(make_pair(-1, -1));
//	for (int i=1;i<=n;i++) {
//		int d, h;
//		cin >> d >> h;
//		v.push_back(make_pair(d, h));
//	}
//	sort(v.begin()+1, v.end(), comparebyd); // 这里只用函数名即可, 不用加 ()
//	// 然后从右往左, 记录从这个位置往后的最大高度
//	for (int i=n;i>=1;i--) {
//		maxh[i] = max(maxh[i+1], v[i].second);
//	}
//	// 遍历查看是否是独特的瓷器
//	int ans=0;
//	int r=1;
//	for (int i=1;i<=n;i++) {
//		// 这里面注意高度也要绝对大于
//		while(r <= n && v[r].first <= v[i].first){
//			r++;
//		}
//		if (r > n || v[i].second >= maxh[r]) {
//			ans++;
//		}
//	}
//	cout << ans << '\n';
//}

const int maxnn = 1e6+5;

struct node{
	int d, h;
};
node arr[maxn];
vector<node> vec[maxnn];
// 不是用 sort (其实是间接使用了 计数排序)
void solve(){
	int n;
	cin >> n;
	for (int i=1;i<=n;i++) {
		cin >> arr[i].d >> arr[i].h;
		vec[arr[i].h].push_back(arr[i]); // 这里是 push 进去了一个 node
	}
	
	// 按高度从大到小进行遍历
	int maxd = 0;
	int ans = 0;
	for (int i=1e6;i>=1;i--) {
		int temp = 0;
		for (auto[d, h]:vec[i]) {
			if (maxd <= d) {
				ans++;
			}
			temp = max(temp, d);
		}
		maxd = max(maxd, temp); // 这层高度遍历完后再更新最大宽度
	}
	
	cout << ans << '\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	t=1;
	while(t--){
		//TODO
		solve();
	}
}



